package com.zjl.redis.第02章_十大数据类型;

import com.zjl.redis.第01章_redis安装.RedisUtil;
import redis.clients.jedis.Jedis;

/**
 * redis字符串(String)
 *
 * String (字符串)
 * string是redis最基本的类型，一个key对应一个value.
 * string类型是二进制安全的，意思是redis的string可以包含任何数据，比如Jpg图片或者序列化的对象。
 * string类型是Redis最基本的数据类型，一个redis中字符串value最多可以是512M
 *
 */
public class B1_String {
    /**
     * String//是一个动态字符串  类似于  ArrayList   预分配
     *      set key value  //添加键和值
     *      @see com.zjl.redis.第12章_大key引出的问题.C_模糊查询的命令 模糊查询
     *      get key    //根据建返回值
     *      命令   升级版.
     *      set key value ex (过期时间秒) NX(但key不存在时才创建key ==setnx) 数字（过期时间）
     *      set key value px (过期时间毫秒秒) xx(覆盖原来的key) 数字（过期时间）
     *
     *      setnx key value//当key不存在时添加   当key存在时添加失败
     *      append key value //在原有key的value末尾添加
     *      strlen key //获得key的value长度
     *    integer  不是  integer的大小 2^63-1  9223372036854775807
     *      incr key//将key的value值+1  value必须为integer类型
     *      decr key//将key的value值-1  value必须为integer类型
     *      incrby/decrby key 数字//key的value值 +/- 数字
     *       //经常用在   是否喜欢的文章      点赞
     *       //商品编号、订单号采用INCR命令生成
     *       incrbyfloat key 数字//对指定key 进行浮点数的加    减使用 -1.1
     *
     *      mset key1 value1 key2 value2   //同时添加多个key-value对
     *      mget key1 key2.。//同时获得多个key对应的value
     *      msetnx key1 value1 key2 value2//当"所有key"不存在时添加  当有一个key存在时添加失败
     *      getrange key 起始位置 结束位置//获得key对应的value的[起始位置 结束位置]的部分  0是第一个
     *      setrange key 起始位置 value//从起始位置开始[  覆盖成value
     *      setex key 过期时间 value//添加同时   设置过期时间
     *      getset key value//修改key的值为value  并返回原来的value
     *
     *
     * 分布式锁
     *      setnx key value//当key不存在时添加   当key存在时添加失败
     *      del key //删除这个键
     *      可以用来实现分布式锁的锁
     *
     *      内部为当前字符串实际分配的空间一般要高于实际字符串长度
     *      当字符串长度小于1M时,扩容都是"加倍"现有的空间,如果超过1M,扩容时每次
     *      只会多扩1M的空间。需要注意的是字符串最大长度为512M。
     *
     * @see com.zjl.redis.第18章_五大数据类型和源码解析.B1_SDS动态字符串
     *
     */
    public static void main(String[] args) {
        /**
         * set key value [NX|XX] [GET] [EX seconds | PX milliseconds| EXAT unix-time-seconds |PXAT unix-time-milliseconds |KEEPTTL ]
         *
         * ●EX seconds:  以秒为单位设置过期时间
         * ●PX milliseconds: 以毫秒为单位设置过期时间
         * ●EXAT timestamp: 设置以秒为单位的UNIX时间戳所对应的时间为过期时间  --不好填值
         * ●PXAT milliseconds-timestamp: 设置以毫秒为单位的UNIX时间戳所对应的时间为过期时间 --不好填值
         * ●NX:键不存在的时候设置键值
         * ●XX:键存在的时候设置键值
         * ●KEEPTTL: 保留设置前指定键的生存时间   //redis 6 才有
         * ●GET: 返回指定键原本的值，若键不存在时返回nil
         */
        Jedis jedis = RedisUtil.getRedis();
        System.currentTimeMillis();//获取当前时间戳
        System.out.println(jedis.ping());//查看是否连接成功  PONG:成功
        System.out.println(jedis.get("a"));
        System.out.println(jedis.set("b","9223372036854775800"));
        System.out.println(jedis.incr("a"));//key 为 a  +1
        System.out.println(jedis.incr("b"));
        System.out.println(jedis.incrBy("b",56));

        jedis.close();
    }
}
